#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QMessageBox>
#include <QInputDialog>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowFlags((Qt::WindowStaysOnTopHint | Qt::WindowMaximizeButtonHint | Qt::WindowContextHelpButtonHint) & (~Qt::WindowCloseButtonHint));
    this->setWindowFlags(this->windowFlags() & (~Qt::WindowCloseButtonHint));
    dial = new Dialog(this);
    help = new Help(this);
    dial->show();
    animations = new QVector<QPropertyAnimation*>();
    connect(ui->actionL_aide,SIGNAL(triggered()),SLOT(help_trig()));
    connect(ui->actionUn_fichier,SIGNAL(triggered()),SLOT(open_trig()));
    connect(ui->actionLire_la_suite_du_fichier_actuel_B_ta,SIGNAL(triggered()),SLOT(next_trig()));
    connect(ui->action_a_coupe,SIGNAL(triggered()),SLOT(cut_trig()));
    connect(ui->action_a_colle,SIGNAL(triggered()),SLOT(paste_trig()));
    connect(ui->action_a_copie,SIGNAL(triggered()),SLOT(copy_trig()));
    connect(ui->actionRefaire_la_derni_re_action_dans_l_historique_des_saisies_ds_le_texte,SIGNAL(triggered()),SLOT(before_trig()));
    connect(ui->actionRevenir_en_arri_re_dans_l_historique_des_saisie,SIGNAL(triggered()),SLOT(after_trig()));
    connect(ui->actionFermer_2,SIGNAL(triggered()),SLOT(on_pushButton_2_clicked()));
    connect(ui->pushButton,SIGNAL(pressed()),SLOT(cut_trig()));
    connect(ui->actionDirect,SIGNAL(triggered()),SLOT(save_trig()));
    connect(ui->actionDs_un_autre_fichier,SIGNAL(triggered()),SLOT(saveas_trig()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::save_trig()
{
    if(scameBox())
    {
        file.write(ui->textEdit->toPlainText().toAscii());
    }
}

void MainWindow::saveas_trig()
{
    if(scameBox())
    {
        bool ok;
        file.close();
        file.setFileName(QInputDialog::getText(this, QString::fromUtf8("Entrez le chemin du fichier!!!"),QString::fromUtf8(""),QLineEdit::Normal,QString::null,&ok,windowFlags(),inputMethodHints()));
        if(file.exists())
        {
            if( file.open(QIODevice::ReadWrite))
            {
                file.write(ui->textEdit->toPlainText().toAscii());
            }
            else
                QMessageBox::question(this,QString::fromUtf8("Cette fenêtre n'a pas de titre"),QString::fromUtf8("Le fichier saisie n'existe pas"),QMessageBox::Ignore,QMessageBox::Ok);
        }
        else
            QMessageBox::question(this,QString::fromUtf8("Cette fenêtre n'a pas de titre"),QString::fromUtf8("Le fichier saisie n'existe pas"),QMessageBox::Ignore,QMessageBox::Ok);
    }
}

void MainWindow::help_trig()
{
    help->show();
}

void MainWindow::open_trig()
{
    if(scameBox())
    {
        bool ok;
        file.setFileName(QInputDialog::getText(this, QString::fromUtf8("Entrez le chemin du fichier!!!"),QString::fromUtf8(""),QLineEdit::Normal,QString::null,&ok,windowFlags(),inputMethodHints()));
        if(ok)
        {
            if( file.open(QIODevice::ReadWrite))
            {
                taille = file.size();
                lecture = taille / 2;
                QByteArray b = file.read(lecture);
                ui->textEdit->setText(b.constData());
            }
            else
                QMessageBox::question(this,QString::fromUtf8("Cette fenêtre n'a pas de titre"),QString::fromUtf8("Le fichier saisie n'existe pas"),QMessageBox::Ignore,QMessageBox::Ok);
        }
    }
}

void MainWindow::next_trig()
{
    if(scameBox())
    {

    }
}

void MainWindow::cut_trig()
{
    if(scameBox())
    {
        ui->textEdit->cut();
    }
}

void MainWindow::copy_trig()
{
    if(scameBox())
    {
        ui->textEdit->copy();
    }
}

void MainWindow::paste_trig()
{
    if(scameBox())
    {
        ui->textEdit->paste();
    }
}

void MainWindow::before_trig()
{
    if(scameBox())
    {
        ui->textEdit->undo();
    }
}

void MainWindow::after_trig()
{
    if(scameBox())
    {
        ui->textEdit->redo();
    }
}

void MainWindow::on_pushButton_3_clicked()
{
    if(scameBox())
    {
        QMessageBox::warning(this,"C'est un WARNING!!!",QString::fromUtf8("Le MindIntepretor™ est une fonctionalité du futur permtant de rédiger à votre place par télépathie. Ce concepte à été introduit par le fils du patron. vous pouvez choisir d'attendre que la nouvelle version sorte pour en profiter ou bien annuler l'operation courement en cour actuelement."),QMessageBox::Ignore, QMessageBox::Abort );
    }
}

void MainWindow::on_pushButton_2_clicked()
{
    QWidget* w;
    QPropertyAnimation* a;

    animations->clear();

    w = ui->textEdit;
    a = new QPropertyAnimation(w,"pos");
    a->setStartValue(w->pos());
    a->setEndValue(QPoint(w->pos().x(),rect().height()  - w->height()));
    a->setDuration(5000);
    a->setEasingCurve(QEasingCurve::OutBounce);
    animations->push_back(a);

    w = ui->pushButton;
    a = new QPropertyAnimation(w,"pos");
    a->setStartValue(w->pos());
    a->setEndValue(QPoint(w->pos().x(),rect().height() - w->height()));
    a->setDuration(5000);
    a->setEasingCurve(QEasingCurve::OutBounce);
    animations->push_back(a);

    w = ui->pushButton_2;
    a = new QPropertyAnimation(w,"pos");
    a->setStartValue(w->pos());
    a->setEndValue(QPoint(w->pos().x(),rect().height()  - w->height()));
    a->setDuration(5000);
    a->setEasingCurve(QEasingCurve::OutBounce);
    animations->push_back(a);

    w = ui->pushButton_3;
    a = new QPropertyAnimation(w,"pos");
    a->setStartValue(w->pos());
    a->setEndValue(QPoint(w->pos().x(), rect().height()  - w->height()));
    a->setDuration(5000);
    a->setEasingCurve(QEasingCurve::OutBounce);
    animations->push_back(a);

    connect(a,SIGNAL(finished()),SLOT(close()));
    for(int i = 0; i < animations->count(); i++)
    {
        ((QPropertyAnimation*)animations->at(i))->start();
    }
}

bool MainWindow::scameBox()
{
    return (QMessageBox::critical(this,QString::fromUtf8("Fonctionalité S.C.A.M.E (Système de Confirmation Automatique Multiple Etendue)"),QString::fromUtf8("N'êtes vous pas entierement sur de vouloir effectuer cet action?! Si oui, vous avez un doute, Sinon vous n'en avez pas. N'est-ce pas? Répondez en conséquence..."),QMessageBox::Yes,QMessageBox::NoAll) ==   QMessageBox::Yes);
}

void MainWindow::on_actionLire_la_suite_du_fichier_actuel_B_ta_triggered()
{
    if(file.exists())
    {
        if(file.isOpen())
        {
            QByteArray b = file.read(lecture);
            ui->textEdit->setText(b.constData());
        }
        else
            QMessageBox::question(this,QString::fromUtf8("Cette fenêtre n'a pas de titre"),QString::fromUtf8("Le fichier que vous croyez avoir ouvert ne l'est toujours pas. Veuillez ouvrir un fichier avant de commencer quoi qe ce soit. Cela évitera pas mal de problème. Cordialement, les développeurs"),QMessageBox::Ignore,QMessageBox::Ok);
    }
    else
    {
        QMessageBox::question(this,QString::fromUtf8("Cette fenêtre n'a pas de titre"),QString::fromUtf8("Le fichier saisie n'existe pas"),QMessageBox::Ignore,QMessageBox::Ok);
    }
}

void MainWindow::on_actionFermer_triggered()
{

}

void MainWindow::on_actionFermer_2_triggered()
{
    file.close();
    this->close();
}
